package com.wyix.service;

import com.wyix.entity.PhotoMetadata;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

public class PhotoCache {
    // 核心缓存容器：键=照片ID，值=元数据+最后访问时间
    private final Map<String, CacheEntry> cache = new HashMap<>();
    private static final long CACHE_EXPIRE_MS = TimeUnit.SECONDS.toMillis(5); // 5分钟过期

    // 缓存条目（内部类，包含元数据和最后访问时间）
    private static class CacheEntry {
        PhotoMetadata metadata;
        long lastAccessTime;

        CacheEntry(PhotoMetadata metadata) {
            this.metadata = metadata;
            this.lastAccessTime = System.currentTimeMillis(); // 初始化时记录访问时间
        }
    }

    // 添加缓存（模拟上传照片后缓存元数据）
    public void addToCache(PhotoMetadata metadata) {
        cache.put(metadata.getPhotoId(), new CacheEntry(metadata));
        System.out.println("✅ 缓存添加成功：" + metadata.getFileName());
    }

    // 查询缓存（带自动过期检查）
    public PhotoMetadata getFromCache(String photoId) {
        CacheEntry entry = cache.get(photoId);
        if (entry == null) return null;

        // 检查是否过期：当前时间 - 最后访问时间 > 5分钟
        long currentTime = System.currentTimeMillis();
        if (currentTime - entry.lastAccessTime > CACHE_EXPIRE_MS) {
            cache.remove(photoId); // 过期则删除
            System.out.println("⏰ 缓存已过期：ID=" + photoId);
            return null;
        }

        entry.lastAccessTime = currentTime; // 更新最后访问时间
        return entry.metadata;
    }

    // 模拟清理所有缓存（实际场景可定时执行）
    public void clearAll() {
        cache.clear();
        System.out.println("🧹 缓存已清空");
    }
}
